﻿// Inner Kit 通用工具库
// Global Switch (全局开关）
//
// Copyright (c) 2025 by 尔西大帝. All rights reserved.
//
// 这个类用于一些调试项目。
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2025-04-14

#include "global_switch.h"
#include "EASTL/unordered_map.h"

namespace ikit {
static eastl::unordered_map<size_t, float> maps;
static eastl::unordered_map<size_t, std::function<float(int, float)>> functions;

void set_switch(sstr name, bool enable) {
  if (enable) {
    maps[name.uid()] = 1.0f;
  } else {
    maps[name.uid()] = 0.0f;
  }
}

bool get_switch(sstr name) { return get_gvalue(name) > 0.0f; }

void set_gvalue(sstr name, float value) { maps[name.uid()] = value; }

float get_gvalue(sstr name) {
  // 查找键是否存在
  auto it = maps.find(name.uid());
  if (it != maps.end()) {
    return it->second; // 存在则返回值
  }
  return 0.0f; // 不存在则返回 0.0f
}

void register_gfunction(sstr name, const std::function<float(int, float)>& func) {
  functions[name.uid()] = func;
}

float call_gfunction(sstr name, int pid, float pvalue) {
  // 查找键是否存在
  auto it = functions.find(name.uid());
  if (it != functions.end()) {
    return it->second(pid, pvalue); // 存在则返回值
  }
  return 0.0f; // 不存在则返回 0.0f
}

} // namespace ikit
